package com.ali8ba.dao;

import java.io.Serializable;
import java.util.List;

import com.ali8ba.common.PageInfo;

/**
 * 通用泛型Dao
 * 
 * @author xiamu
 * 
 * @param <T>
 * @param <ID>
 */
public interface IGenericDao<T, ID extends Serializable> {

	/**
	 * 
	 * @param id
	 * @return
	 */
	public T get(ID id);

	public T find(Class<T> clazz, ID id);
	
	public T findForObject(String jpql,Object... params);
	
	public T findForObject(String jpql,Object param);

	/**
	 * 保存
	 * 
	 * @param t
	 */
	public void save(T t);

	/**
	 * 删除
	 * 
	 * @param t
	 */
	public void delete(T t);

	//public Query createQuery(String jpql);

	/**
	 * 统计查询只返回一个结果(count,max,min,sum,avg)
	 * 
	 * @param jpql
	 * @return
	 */
	public long getSingleResult(String jpql);

	/**
	 * 统计查询只返回一个结果(count,max,min,sum,avg)
	 * 
	 * @param jpql
	 * @param params
	 * @return
	 */
	public long getSingleResult(String jpql, Object... params);

	public List<T> find(String jpql);

	public List<T> find(String jpql, Object param);

	public List<T> find(String jpql, Object... params);

	public List<T> findWithSize(String jpql, int size, Object... params);

	/**
	 * 分页查询
	 * 
	 * @param jpql
	 * @param index
	 * @param pageSize
	 * @param params
	 * @return
	 */
	public PageInfo<T> findForPage(String jpql, int index, int pageSize,
			Object... params);

	/**
	 * 保存或更新
	 * 
	 * @param t
	 */
	public T saveOrUpdate(T t);

	/**
	 * 批量操作
	 * 
	 * @param jpal
	 * @return
	 */
	public long batchUpdate(String jpal);

	//public List findByNativeSQL(String jpql, Object... params);

}
